package com.paiai.lslease.service.appuser;

import com.paiai.lslease.auto.model.AppSysUser;
import com.paiai.lslease.auto.model.AppSysUserRole;

import java.util.List;

public interface AppSysUserService {

    /**
     * 根据微信OPENID验证用户状态 1 用户状态正常,请直接根据微信openid获取用户详情；-1 未注册，请引导用户绑定微信账号 throws Exception; 2 用户已标记为禁用；4 用户已标记为删除
     */
    int checkAppUserStateByWechatOpenId(String wechatOpenId) throws Exception;

    /**
     * 根据用户ID获取用户详情
     */
    AppSysUser getAppSysUserInfoById(int userId) throws Exception;

    /**
     * 根据微信openid获取用户详情
     */
    AppSysUser getAppSysUserInfoByWechatOpenId(String wechatOpenId) throws Exception;

    /**
     * 根据手机号码获取用户详情
     */
    AppSysUser getAppSysUserInfoByMobile(String mobile) throws Exception;

    /**
     * 检查用户是否已绑定,根据手机号码和openid
     */
    boolean axaccountBinded(String mobile, String openId) throws Exception;

    /**
     * 绑定微信账号
     */
    AppSysUser bindWXAccount(AppSysUser appSysUser) throws Exception;

    /**
     * 验证用户是否已注册
     */
    boolean checkUserRegisterState(int userId) throws Exception;

    /**
     * 获取系统用户角色类型
     */
    int getSysUserRoleType() throws Exception;

    /**
     * 获取租客角色类型
     */
    int getTenantRoleType() throws Exception;

    /**
     * 获取房东角色类型
     */
    int getLandlordRoleType() throws Exception;
//
//    /**
//     * 获取既是房东又是租客的角色类型
//     */
//    int getLandlordTenantRoleType() throws Exception;

    /**
     * 获取安装工的角色类型
     */
    int getInstallWorkerRoleType() throws Exception;

    /**
     * 获取房东授权的管理员的角色类型
     */
    int getLanlordAuthManagerRoleType() throws Exception;

    /**
     * 获取系统用户角色ID
     */
    int getSysUserRoleId() throws Exception;

    /**
     * 获取租客角色ID
     */
    int getTenantRoleId() throws Exception;

    /**
     * 获取房东角色ID
     */
    int getLandlordRoleId() throws Exception;

//    /**
//     * 获取既是房东又是租客的角色ID
//     */
//    int getLandlordTenantRoleId() throws Exception;

    /**
     * 获取安装工人的角色ID
     */
    int getInstallWorkerRoleId() throws Exception;

    /**
     * 获取房东授权的管理员的角色ID
     */
    int getLanlordAuthManagerRoleId() throws Exception;

    /**
     * 查询用户是否已注册
     */
    boolean userExist(int userId) throws Exception;

    /**
     * 查询用户是否是租客
     */
    boolean userBelongTenant(int userId) throws Exception;

    /**
     * 查询用户是否是房东
     */
    boolean userBelongLandlord(int userId) throws Exception;

    /**
     * 查询用户是否是安装工人
     */
    boolean userBelongInstallWorker(int userId) throws Exception;

    /**
     * 查询用户是否是房东授权的管理员，通过用户手机号码检索用户
     */
    boolean userBelongLandlordAuthManagerByUserMobile(String userMobile) throws Exception;

    /**
     * 查询用户是否是房东授权的管理员，通过用户ID检索用户
     */
    boolean userBelongLandlordAuthManagerById(int userId) throws Exception;

    /**
     * 获取用户的角色列表
     */
    List<AppSysUserRole> selectSysUserRoleList(int userId) throws Exception;

    /**
     * 检查角色是否存在
     */
    boolean checkRoleIdExist(int roleId) throws Exception;

    /**
     * 检查用户是否有某一个角色，通过用户ID检索用户
     */
    boolean userBelongRoleIdByUserId(int userId, int roleId) throws Exception;

    /**
     * 检查用户是否有某一个角色，通过用户ID检索用户
     */
    boolean userBelongRoleIdByUserMobile(String userMobile, int roleId) throws Exception;

    /**
     * 检查用户角色是否存在
     */
    boolean checkUserRoleExist(int userId, int roleId) throws Exception;

    /**
     * 给用增加角色，通过用户ID检索用户
     */
    boolean addRoleToUserByUserId(int userId, int roleId) throws Exception;

    /**
     * 给用增加角色，通过用户手机号码检索用户
     */
    boolean addRoleToUserByUserMobile(String userMobile, int roleId) throws Exception;

    /**
     * 删除用户角色，通过用户ID检索用户
     */
    boolean deleteRoleToUserByUserId(int userId, int roleId) throws Exception;

    /**
     * 删除用户角色，通过用户手机号码检索用户
     */
    boolean deleteRoleToUserByUserMobile(String userMobile, int roleId) throws Exception;

    /**
     * 给用户增加系统用户的角色
     */
    boolean addSysRoleToUserById(int userId) throws Exception;

    /**
     * 删除用户的系统用户角色
     */
    boolean deleteSysRoleToUserById(int userId) throws Exception;

    /**
     * 给用户增加租客角色，通过用户ID检索用户
     */
    boolean addTenantRoleToUserById(int userId) throws Exception;

    /**
     * 给用户增加租客角色，通过用户手机号码检索用户
     */
    boolean addTenantRoleToUserByMobile(String userMobile) throws Exception;

    /**
     * 删除用户的租客角色
     */
    boolean deleteTenantRoleToUser(int userId) throws Exception;

    /**
     * 给用户增加房东角色
     */
    boolean addLandlordRoleToUserById(int userId) throws Exception;

    /**
     * 删除用户的房东角色
     */
    boolean deleteLandlordRoleToUserById(int userId) throws Exception;

    /**
     * 给用户增加安装人员的角色
     */
    boolean addInstallWorkerRoleToUserById(int userId) throws Exception;

    /**
     * 删除用户的安装人员角色
     */
    boolean deleteInstallWorkerRoleToUserById(int userId) throws Exception;

    /**
     * 给用户增加房东授权的管理员角色，通过手机号码检索用户
     */
    boolean addLandlordAuthManagerRoleToUserByMobile(String userMobile) throws Exception;

    /**
     * 删除用户的房东授权的管理员角色，通过用户ID检索用户
     */
    boolean deleteLandlordAuthManagerRoleToUserById(int userId) throws Exception;

    /**
     * 删除用户的房东授权的管理员角色，通过用户手机号码检索用户
     */
    boolean deleteLandlordAuthManagerRoleToUserByMobile(String userMobile) throws Exception;

    /**
     * 修改用户基本信息
     */
    AppSysUser modifyUserInfoByPrimaryKey(AppSysUser appSysUser) throws Exception;
}
